*seufz*
*lufthol*
aaaaalso... :)
ich möchte mit folgender funktion in der lage sein, beliebige subsets von array zu bekommen. ARRIn ist das 2D array, das man reintut. die SubXXXStart/End zeigen das "von ... bis" an und RowStep und ColStep geben an, ob in 1er Schritten oder mehr gegangen werden soll
Function SubArray2D(ARRIn, SubRowStart As Integer, SubRowEnd As Integer, SubColumnStart As Integer, SubColumnEnd As Integer, Optional RowStep As Integer, Optional ColStep As Integer)
'default parameter
If IsMissing(RowStep) Then RowStep = 1
If IsMissing(ColStep) Then ColStep = 1
' This Function returns a subset of ARRIn, specified by the other parameters
Dim ARRTemp()
Dim VARNewRowIdx, VARNewColIdx As Integer
VARNewRowIdx = 0
VARNewColIdx = 0
'läuft über ARRIn und schreibt die werte in einen neuen array ARRTemp der richtigen größe
For IdxRow = 0 To SubRowEnd - SubRowStart Step RowStep
VARNewRowIdx = VARNewRowIdx + 1
For IdxCol = 0 To SubColumnEnd - SubColumnStart Step ColStep
VARNewColIdx = VARNewColIdx + 1
ReDim Preserve ARRTemp(VARNewRowIdx, VARNewColIdx)
ARRTemp(VARNewRowIdx, VARNewColIdx) = ARRIn(SubRowStart + IdxRow, SubColumnStart + IdxCol)
Next IdxCol
VARNewColIdx = 0
Next IdxRow
SubArray2D = ARRTemp
End Function
Aber er stürzt bei der Zeile
ReDim Preserve ARRTemp(VARNewRowIdx, VARNewColIdx)
immer mit subscript out of range ab, aber das kannst du ja selbst sehen...
Um die Funktion zu testen nutze ich folgende routine:
Sub JustSomeTest()
Dim MyRow, MyColumn As Integer
MyRow = 6
MyColumn = 8
Dim MyArray()
ReDim MyArray(MyRow, MyColumn)
'füllt den array mit irgendwelchen zahlen
For i = 1 To MyRow
For j = 1 To MyColumn
MyArray(i, j) = i * 10 & ":" & j * 10
Next j
Next i
'funktionsaufruf
ARRNew = SubArray2D(MyArray, 1, 6, 1, 6, 1, 1)
'zeigt arraygröße an
MsgBox UBound(ARRNew, 1) & ", " & UBound(ARRNew, 2)
'zeigt den inhalt einer arrayzeile an
VARTempString = ""
For i = 1 To UBound(ARRNew, 2)
VARTempString = VARTempString & ARRNew(1, 1) & " "
Next i
MsgBox VARTempString
End Sub
Wahrscheinlich läßt du das mal bei dir laufen und dann siehste ja was nicht geht...
das ganze brauch ich dann später zusammen mit einer funktion, die mir alle einzigartigen elemente eines arrays in einen neuen array schreibt. |